import { Mt, MtEntity } from '@/api/manager/mt'
import { PollEntity } from '@/api/manager/poll/interface'
import { ListChildComponentProps } from 'react-window'

/**轮询终端*/
export interface PollTerModel {
	mcc: Mt
	status: {
		checked: boolean
	}
	mtKey: Mt['mtKey']
	number: string
}
export type PollListModel = PollTerModel[]
/**Item传入的数据终端行数据*/
export interface RowRendererProps extends ListChildComponentProps {
	data: Array<PollTerModel>
}

/**
 * 转换轮询终端拖拽转换终端
 * @param source 轮询终端
 * @returns 展示数据
 */
export const ListTranslator = (source: Array<MtEntity>): PollTerModel[] => {
	return source.map((item) => {
		const mt = item
		return {
			mcc: new Mt(mt),
			status: {
				checked: false,
			},
			mtKey: mt.mt_key,
			number: '',
		}
	})
}
//拖拽终端参数
export interface terminalEntity {
	mts: PollListModel
	from: string | undefined
	dropIndex: number
}
//context入参
export interface ProvideDefault {
	remove: (mtKey: string) => void
	handleClickLi?: () => void
}
/**接口返回预案实体 */
export type PlanResponseEntity = Array<{
	name: string
	id: string
}>
/**转换后预案数据*/
export type SelectOption = {
	label: string
	value: string
}
/**发送给主页数据源 */
export type RxMainInjectDataSourceEntity = Array<{
	mtKey: string
	isActive: boolean
}>
/**开启轮询、继续轮询(参数)*/
export interface PollParamsEntity {
	/**id*/
	id?: string
	/**预案名称*/
	name: string
	/**轮询次数，0表示无限次轮询*/
	num: number
	/**轮询间隔时间(秒)*/
	keep_time: number
	/**
	   轮询模式 1是不带音频，3 带音频，管理方：10不带，11带
       1-视频轮询  是否带音频不勾选;
       3-音视频轮询 是否带音频勾选;
       10-主席视频轮询 会议轮询是否是轮询到发言人 不勾选;
       11-主席音视频轮询; 会议轮询是否是轮询到发言人 勾选
	   */
	mode: number | null
	/**轮询到的终端的位置*/
	poll_index: number
	/**轮询终端成员*/
	members: Array<{
		/**e164 */
		e164: string
		/**mtId */
		mt_id: string
		/**mtIp */
		mt_ip?: string
		/**mtKey */
		mt_key: string
		/**名称，最大字符长度：128个字节 */
		name?: string
		/**所属会议e164号，级联会议时为本级会议e164号 */
		conf_e164: string
		/**头像，仅作为显示使用，无需下参 */
		portrait?: string
		/**帐号，最大字符长度：128个字节 */
		account: string
		/**
		 * 呼叫协议，若终端版本低于 6.1SP5 且为组织架构账号/E164号，则忽略下参，按规则匹配；否则，若终端下参，以下参为准，不下参按规则匹配
		 * // 匹配规则:
		 *  1.组织架构账号/E164号: protocol 为 AUTO
		 *  2.ip账号:
		 *  conf_protocol 为 H323或RTC : protocol 为 H323
		 * conf_protocol 为 SIP : protocol 为 SIP
		 *  0-H323;
		 *  1-SIP;
		 *  2-RTC;
		 *  255-AUTO; */
		protocol?: number
		/**是否常用终端 */
		often_mt?: number
		/**是否多流0-否;1-是; */
		stream?: number

		/**是否互动终端 */
		interactive_mt?: number
		/**是否在线 0-不在线;1-在线;*/
		online?: number

		/**
		 * 帐号类型
		 * 1-moid;
		 * 4-非系统邮箱;
		 * 5-e164号;
		 * 6-电话;
		 * 7-ip地址;
		 * 8-别名@ip(监控前端);
		 * */
		account_type: number
		/**终端呼叫码率，不可超过会议码率，默认为会议码率 */
		bitrate?: number
		/**
		 * 终端类型
		 * 1-普通终端;
		 * 3-电话终端;
		 */
		mt_type?: number
	}>
}

/** type 轮询类型  1-会议轮询;  2-管理方轮询;  3-上传轮询; */
export type PollCometd = PollEntity & { type: 1 | 2 | 3 }

//获取mtid数组
export const getMtIdList = (list: PollListModel) => {
	let listMtid: string[] = []
	list.map((item) => {
		listMtid.push(item.mtKey)
	})
	return listMtid
}
//获取mtid对象
export const getMtId = (list: PollListModel) => {
	let listMtid: { mtid: string }[] = []
	list.map((item) => {
		listMtid.push({
			mtid: item.mtKey,
		})
	})
	return listMtid
}
